from abc import ABC, abstractmethod
from typing import List


class LLMProviderBase(ABC):
    @abstractmethod
    async def chat(
        self,
        messages: List[dict],
        temperature: float,
        frequency_penalty: float,
        presence_penalty: float,
    ) -> str:
        pass

    @abstractmethod
    async def chat_stream(
        self,
        messages: List[dict],
        temperature: float,
        frequency_penalty: float,
        presence_penalty: float,
    ):
        pass
